package common.util;

import cn.hutool.core.util.ObjectUtil;
import common.config.exception.CustomException;

import java.util.Arrays;

/**
 * null 值检测
 */
public class NullChecker {

	private NullChecker() {
		throw new AssertionError("不可实例化");
	}

	/**
	 * 有一个为 null 就返回 true，否则返回 false
	 *
	 * @param objects Object...
	 * @return boolean
	 */
	public static boolean checkAnyNull(Object... objects) {
		return Arrays.stream(objects).anyMatch(ObjectUtil::isNull);
	}

	/**
	 * 全为 null 就返回 true，否则返回 false
	 *
	 * @param objects Object...
	 * @return boolean
	 */
	public static boolean checkAllNull(Object... objects) {
		return Arrays.stream(objects).allMatch(ObjectUtil::isNull);
	}

	/**
	 * 有一个为 null 就抛出异常
	 *
	 * @param objects Object...
	 */
	public static void throwExceptionIfAnyNull(Object... objects) {
		if (checkAnyNull(objects)) {
			throw new CustomException("参数信息不完整");
		}
	}

	/**
	 * 参数全为 null 则抛出异常
	 *
	 * @param objects Object...
	 */
	public static void throwExceptionIfAllNull(Object... objects) {
		if (checkAllNull(objects)) {
			throw new CustomException("参数信息不完整");
		}
	}

}
